package com.tedu.api.io;

import org.junit.Test;

import java.io.File;
import java.io.IOException;

/**包位置：java.io
 * File   表示文件或者文件夹【存在硬盘】
 * 测试：io包下创建文件  demo.txt
 * 验证项目下是否存在 demo.txt 文件
 * 测试：io包下创建文件  demo.txt
 * 验证项目下是否存在 demo.txt   文件
 * 创建File文件类
 * File file=new File("传入路径")
 * 构造器：传入路径   /  \表示路径
 *                 /    表示路径、文件下载【本地】---本次测试
 *                 \    表示路径、文件上传【服务器】--网络      √
 *File文件/文件夹类可以做什么：【常用方法】
 * 1.查看文件或者文件夹的属性信息（名字、大小、判断文件夹是否存在 等)
 * 2.操作文件或者文件夹（创建、删除等）
 * 3.访问一个目录的子项（访问文件夹下的文件夹操作）
 */
public class FileAPI {
    @Test
    public void testFile() {
        //项目结构：C/S架构---Maven---查路径---通过Idea查路径【准】
        //找到需要查找文件夹/文件---右键---打开于---Explorer
        //src\main\java\com\tedu\api\io         char c='\\'  转译成路径：\
        //编写Java代码--任何操作平台运行---路径---封装：静态属性
        //Java 编写 \\ 情况--->
        // --->File.separator  静态属性可以在任何平台上转义成对应路径
        File file = new File("src" + File.separator + "ma" +
                "in" + File.separator + "jav" +
                "a" + File.separator + "co" +
                "m" + File.separator + "te" +
                "du" + File.separator + "ap" +
                "i" + File.separator + "i" +
                "o" + File.separator + "demo.txt");
        //验证:demo.txt文件是否存在
        boolean b = file.exists();
        System.out.println("测试demo.txt文件是否存在：" + b);
        /**
         * getName()    返回值：String
         * 获取文件/文件夹的名字【注意：不管file是否存在，只会拿名】
         * length()    返回值：long
         * 返回当前文件的大小（字节量） --汉字：三个字节量
         * exists()    返回值：boolean
         * 判断file文件是否存在，存在true,反之
         */
    }
        @Test
                public void testGLE(){
            File file=new File("src"+File.separator+"ma" +
                    "in"+File.separator+"jav" +
                    "a"+File.separator+"co" +
                    "m"+File.separator+"te" +
                    "du"+File.separator+"ap"+
                    "i"+File.separator+"i" +
                    "o"+File.separator+"demo.txt");
            String str=file.getName();
            System.out.println("file文件名字是："+str);
            long length=file.length();
            System.out.println("file文件字节量是"+length);
    }
    /**
     * 操作文件或者文件夹（创建、删除）
     * createNewFile（）
     * 创建新文件，创建不成功，如果不成功抛出IO流异常
     *
     */


    @Test
    public void testCreateNewFile() throws IOException {
        //需求：用程序创建一个文件：text.txt
        File file=new File("."+File.separator+"demo.txt");
        //创建text.txt---判断当前文件夹是否存在，不存在--创建
        //                                    存在--不创建
        if(!file.exists()){ //text.txt文件不存在
            //创建文件
            System.out.println("文件是不存在");
            file.createNewFile();
            System.out.println("文件创建完毕~");
        }else{
            System.out.println("文件存在，别创建~");
        }
    }

    /**
     * 拓展：存放文件位置 ： Maven项目：main 程序入口
     *                              test 程序测试
     *       查找：main下或者test下，必须从src位置开始找
     *       ---------------------
     *       .   代表当前项目下
     */
    @Test
    public void testPath() throws IOException {
        //FileAPI.java相对于项目名  ”API“  下
        File file=new File("."+File.separator+"1");
        //查看 file 路径
        //System.out.println(file.getCanonicalFile());
        System.out.println("API项目路径下文件是否存在"+file.exists());
    }

    /**文件删除操作
     * delete()
     * 删除已经创建完毕文件/文件夹
     */
    @Test
    public void testDelete(){
        //创建File文件
        File file=new File("."+File.separator+"text.txt");
        //删除      如果有文件    删除     没有没有    不删
        if(file.exists()){
            System.out.println("有文件");
            file.delete();
            System.out.println("文件删除成功~");
        }else{
            System.out.println("文件没有，别删啦~");
        }

    }

    /**
     * mkdir()
     * 在当前项目下创建一个[目录:文件夹]
     * mkdirs()
     * 创建多层【目录：文件夹】
     * 提升：删除demo下所有文件夹
     */
    @Test
    public void testMkdir(){
        //创建文件夹---创建在API文件夹下demo文件夹--->abc文件夹---bcd文件夹
        File file=new File("."+File.separator+"dem" +
                "o"+""+File.separator+"abc"+File.separator+"bcd");
        //创建文件夹---如果没有文件夹  创建  |  有    不创建
        if(!file.exists()){
            System.out.println("没有文件夹");
            //file.mkdir();   创建一个文件夹
            file.mkdirs();   //创建多层文件夹
            System.out.println("创建成功~");
        }else{
            System.out.println("已经存在，别创建了~");
        }
        if(!file.exists()){
            System.out.println("有文件");
            file.delete();
        }else{
            System.out.println("文件已删除，别删了~");
        }


    }

    /**
     * isDirectory()     判断是否是【目录：文件夹】，返回true
     * isFile()          判断是否是文件，返回true
     * listFiles         返回值：数组----File[]
     * 获取当前目录下所有子项【包含：文件、文件夹】
     */
    @Test
    public void testListFiles(){
        //需求：获取当前”API“  文件夹下   所有的文件、文件夹
        File file=new File(".");
        //只获取文件夹
        if(file.isDirectory()){
            //获取文件夹--子项
            File[] files=file.listFiles();
            //打印获取到的文件夹名字
            for(int i=0;i<files.length;i++){
                System.out.println("files[i]");
            }
        }
    }
}
